package com.课上案例练习.网络编程.Tcp编程聊天版本2;


import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

/**
 * 版本二实现手动输入数据
 * 服务端输入信息
 *
 * 出现一问一答的主要原因：
 * 两端都是按照上下文顺序执行的
 * 都要等待另一端的输入或者输出才能继续执行
 *
 *
 */


/**
 * 客户端
 */
public class Client {
    static Scanner input = new Scanner(System.in);

    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("localhost", 9999);
        //发送连接
        DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());
        dataOutputStream.writeUTF("你好,服务端");
          while (true){
              //接收服务端数据并打印数据,利用输入流
              DataInputStream dataInputStream = new DataInputStream(socket.getInputStream());
              System.out.println(dataInputStream.readUTF());
              //发送数据给服务端
              dataOutputStream.writeUTF(input.next());
          }
    }
}

/**
 * 服务端
 */
class Server {
    public static void main(String[] args) throws IOException {
        //创建连接
        //创建绑定到指定端口的服务器套接字。
        ServerSocket socket = new ServerSocket(9999);
        //等待客户端发送的请求
        Socket socket1 = socket.accept();
        //做一个死循环，目的是不让服务端停止执行任务
        while (true) {
            //获取连接的输入流,获取客户端的信息
            DataInputStream dataInputStream = new DataInputStream(socket1.getInputStream());
            //打印出客户端传输过来信息
            System.out.println(dataInputStream.readUTF());
            //获取连接的输入流，发送信息给客户端
            DataOutputStream dataOutputStream = new DataOutputStream(socket1.getOutputStream());
            System.out.println("请输入要发送给客户端的信息：");
            String next = Client.input.next();
            dataOutputStream.writeUTF(next);
        }

    }
}